package com.xian.d1_set;

/**
 * 在了解哈希表之前需要先理解哈希值的概念
 * 哈希值
 *   是JDK根据对象的地址，按照某种规则算出来的int类型的数值。
 *
 * object类的API
 *   public int hashcode():返回对象的哈希值
 *
 * 对象的哈希值特点
 *   同一个对象多次调用hashcode()方法返回的哈希值是相同的默认情况下，不同对象的哈希值是不同的。
 *
 *HashSet去重复原理解析
 * ①创建一个默认长度16的数组，数组名table
 * ②根据元素的哈希值跟数组的长度求余计算出应存入的位置（哈希算法)
 * ③判断当前位置是否为null，如果是null直接存入
 * ④如果位置不为null，表示有元素，则调用equals方法比较
 * ⑤如果一样，则不存，如果不一样，则存入数组，
 * 结论:如果希望Set集合认为2个内容一样的对象是重复的，必须重写对象的hashCode()和equals()方法
 */
public class SetDemo2 {
    public static void main(String[] args) {
        //目标:学会获取对象的哈希值，并确认一下
        String name = "小贤";
        System.out.println(name.hashCode());
        System.out.println(name.hashCode());

        String name1 = "小贤1";
        System.out.println(name1.hashCode());
        System.out.println(name1.hashCode());
    }
}
